/**
 * 权限管理工具类
 * 处理用户认证、角色权限验证等功能
 */

// 用户角色枚举
export const USER_ROLES = {
  ADMIN: 'admin',
  USER: 'user'
}

// 权限枚举
export const PERMISSIONS = {
  // 用户管理
  USER_VIEW: 'user:view',
  USER_CREATE: 'user:create',
  USER_EDIT: 'user:edit',
  USER_DELETE: 'user:delete',
  
  // 餐厅管理
  RESTAURANT_VIEW: 'restaurant:view',
  RESTAURANT_CREATE: 'restaurant:create',
  RESTAURANT_EDIT: 'restaurant:edit',
  RESTAURANT_DELETE: 'restaurant:delete',
  
  // 菜品管理
  DISH_VIEW: 'dish:view',
  DISH_CREATE: 'dish:create',
  DISH_EDIT: 'dish:edit',
  DISH_DELETE: 'dish:delete',
  
  // 订单管理
  ORDER_VIEW: 'order:view',
  ORDER_VIEW_ALL: 'order:view:all', // 查看所有订单
  ORDER_EDIT: 'order:edit',
  ORDER_DELETE: 'order:delete',
  
  // 系统管理
  SYSTEM_SETTINGS: 'system:settings',
  SYSTEM_LOGS: 'system:logs'
}

// 角色权限映射
export const ROLE_PERMISSIONS = {
  [USER_ROLES.ADMIN]: [
    // 管理员拥有所有权限
    PERMISSIONS.USER_VIEW,
    PERMISSIONS.USER_CREATE,
    PERMISSIONS.USER_EDIT,
    PERMISSIONS.USER_DELETE,
    PERMISSIONS.RESTAURANT_VIEW,
    PERMISSIONS.RESTAURANT_CREATE,
    PERMISSIONS.RESTAURANT_EDIT,
    PERMISSIONS.RESTAURANT_DELETE,
    PERMISSIONS.DISH_VIEW,
    PERMISSIONS.DISH_CREATE,
    PERMISSIONS.DISH_EDIT,
    PERMISSIONS.DISH_DELETE,
    PERMISSIONS.ORDER_VIEW,
    PERMISSIONS.ORDER_VIEW_ALL,
    PERMISSIONS.ORDER_EDIT,
    PERMISSIONS.ORDER_DELETE,
    PERMISSIONS.SYSTEM_SETTINGS,
    PERMISSIONS.SYSTEM_LOGS
  ],
  [USER_ROLES.USER]: [
    // 普通用户权限
    PERMISSIONS.RESTAURANT_VIEW,
    PERMISSIONS.DISH_VIEW,
    PERMISSIONS.ORDER_VIEW // 只能查看自己的订单
  ]
}

/**
 * 获取当前用户信息
 * @returns {Object|null} 用户信息
 */
export const getCurrentUser = () => {
  try {
    const userStr = localStorage.getItem('user')
    return userStr ? JSON.parse(userStr) : null
  } catch (error) {
    console.error('获取用户信息失败:', error)
    return null
  }
}

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export const isAuthenticated = () => {
  const user = getCurrentUser()
  return !!(user && user.token)
}

/**
 * 检查用户是否为管理员
 * @returns {boolean} 是否为管理员
 */
export const isAdmin = () => {
  const user = getCurrentUser()
  return user && user.role === USER_ROLES.ADMIN
}

/**
 * 检查用户是否有指定权限
 * @param {string} permission 权限标识
 * @returns {boolean} 是否有权限
 */
export const hasPermission = (permission) => {
  const user = getCurrentUser()
  if (!user || !user.role) return false
  
  const userPermissions = ROLE_PERMISSIONS[user.role] || []
  return userPermissions.includes(permission)
}

/**
 * 检查用户是否有任一权限
 * @param {Array<string>} permissions 权限数组
 * @returns {boolean} 是否有任一权限
 */
export const hasAnyPermission = (permissions) => {
  return permissions.some(permission => hasPermission(permission))
}

/**
 * 检查用户是否有所有权限
 * @param {Array<string>} permissions 权限数组
 * @returns {boolean} 是否有所有权限
 */
export const hasAllPermissions = (permissions) => {
  return permissions.every(permission => hasPermission(permission))
}

/**
 * 获取用户所有权限
 * @returns {Array<string>} 权限数组
 */
export const getUserPermissions = () => {
  const user = getCurrentUser()
  if (!user || !user.role) return []
  
  return ROLE_PERMISSIONS[user.role] || []
}

/**
 * 清除用户认证信息
 */
export const clearAuth = () => {
  localStorage.removeItem('user')
  localStorage.removeItem('token')
  localStorage.removeItem('files1')
  localStorage.removeItem('username')
  localStorage.removeItem('id')
  localStorage.removeItem('nickname')
}

/**
 * 设置用户信息
 * @param {Object} userInfo 用户信息
 */
export const setUserInfo = (userInfo) => {
  localStorage.setItem('user', JSON.stringify(userInfo))
}

/**
 * 检查路由权限
 * @param {string} routeName 路由名称
 * @returns {boolean} 是否有访问权限
 */
export const canAccessRoute = (routeName) => {
  // 管理员路由权限映射
  const adminRoutes = [
    'alluser',      // 用户管理
    'allgoods',     // 订单管理
    'addRestaurant', // 添加餐厅
    'editRestaurant' // 编辑餐厅
  ]
  
  // 如果是管理员专用路由，检查是否为管理员
  if (adminRoutes.includes(routeName)) {
    return isAdmin()
  }
  
  // 其他路由只需要登录即可
  return isAuthenticated()
}

/**
 * 获取用户角色显示名称
 * @param {string} role 角色标识
 * @returns {string} 角色显示名称
 */
export const getRoleDisplayName = (role) => {
  const roleNames = {
    [USER_ROLES.ADMIN]: '管理员',
    [USER_ROLES.USER]: '普通用户'
  }
  return roleNames[role] || '未知角色'
}

/**
 * 权限验证装饰器（用于组件方法）
 * @param {string|Array<string>} permissions 权限或权限数组
 * @param {Function} callback 有权限时的回调
 * @param {Function} fallback 无权限时的回调
 */
export const withPermission = (permissions, callback, fallback) => {
  const hasAuth = Array.isArray(permissions) 
    ? hasAnyPermission(permissions)
    : hasPermission(permissions)
    
  if (hasAuth) {
    return callback && callback()
  } else {
    return fallback && fallback()
  }
}
